import { useState } from 'react';

export default function useArray(defaultValue) {
    const [array, setArray] = useState(defaultValue);

    // 添加一个元素于末尾
    function push(element) {
        setArray(a => [...a, element])
    }

    // 添加一个元素于头部
    function unshift(element) {
        setArray(a => [element, ...a])
    }

    // 删除指定索引元素
    function remove(index) {
        setArray(a => a.filter((_, i) => i !== index))
    }

    // 过滤数组
    function filter(callback) {
        setArray(a => a.filter(callback))
    }

    // 更新数组元素
    function update(index, newElement) {
        setArray(a => [
            ...a.slice(0, index),
            newElement,
            ...a.slice(index + 1, a.length)
        ])
    }

    // 清空数组
    function clear() {
        setArray([])
    }

    return { array, setArray, toolkit: { push, unshift, remove, filter, update, clear } }
}
